package tests;

import java.util.ArrayList;
import org.openqa.selenium.By;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;

import framework.BaseTestExtended;
import framework.ExcelManager;
import framework.forms.BaseFormWithLeftSlideBar.LEFT_MENU_LINKS;
import framework.forms.BaseTable;
import framework.forms.MainForm;

/** Тест на выгрузку списка планов закупок из ЛК в эксель
 */
public class ExtractPlanItoExcel extends BaseTestExtended {

	private static final String COL_PLAN_ZAKUPKI = "План закупки"; // названия колонок для итоговой выгрузки
	private static final String COL_PUBLISH_DATE = "Опубликовано";
	private String tableLocator = "tabtable"; // локатор таблицы данных
	private BaseTable bTable = new BaseTable(By.id(tableLocator), "Список планов закупки", tableLocator); // экземпляр класса для работы с таблицами данных

	/** Базовый конструктор
	 * @param userIndex - порядковый номер юзера (из файла credentials.properties), под которым проходится текущий тест
	 */
	@Parameters({"userIndex"})
	public ExtractPlanItoExcel(@Optional("1") final int userIndex){
		ExtractPlanItoExcel.userIndex = userIndex;
	}
	private static int userIndex; // порядковый номер юзера (из файла credentials.properties), под которым проходится текущий тест

	/** Метод запуска тестов
	 */
	@Override
	public void runTest() {
		super.runTest();
		LogStep(); //1 Открываем главную страницу, логинимся
		info("Открываем главную страницу, логинимся");
		MainForm mainForm = new MainForm();
		/*LoginForm loginForm  = mainForm.openLoginForm(); // закомменчено, т.к. тестовые стенды не работают, а на ПАК в ЛК войти нельзя
		MyCabinetForm mCab = loginForm.login(userIndex);

		LogStep(); //2 Открываем реестр планов
		info("Открываем реестр планов");*/
       	mainForm.navigateToLeftItem(LEFT_MENU_LINKS.REEST_PLANOV_ZAKUPOK);
       	
       	LogStep(); //3 Формируем таблицы данных из записей реестра
		info("Формируем таблицы данных из записей реестра");
		ArrayList<ArrayList<String>> l = bTable.getTableContents(bTable.cellTemplate);
	    // записываем номера нужных колонок
		int c = bTable.getColNumByName(COL_PLAN_ZAKUPKI);
		BaseTable.columnNames.put(COL_PLAN_ZAKUPKI, c);
		c = bTable.getColNumByName(COL_PUBLISH_DATE);
		BaseTable.columnNames.put(COL_PUBLISH_DATE, c);

	 	LogStep(); //4 Сортируем таблицы данных и извлекаем нужные колонки
		info("Сортируем таблицы данных и извлекаем нужные колонки");
		ArrayList<ArrayList<String>> sortedList = bTable.sortArrayList(l, BaseTable.columnNames.get(COL_PUBLISH_DATE));
		ArrayList<ArrayList<String>> extractedList = bTable.exctractArrayList(sortedList, BaseTable.columnNames);// финальный массив отсортированных данных с нужными колонками

	 	LogStep(); //5 Выгружаем данные в эксель
		info("Выгружаем данные в эксель");
		ExcelManager manager = new ExcelManager();
		manager.exportDataToExcel(extractedList, "Plan info export.xls");

	}

	@Override
	public boolean shouldAnalys() {
		return false;
	}

	@Override
	public void invokeAnalys(Throwable exc, String bodyText) {
	}

}
